<!--
 * @Description: 项目管理-发起项目-项目权限
 * @Author gong
 * @create 2024/9/4 17:27
 -->
<!--setup-->
<script setup>
import { onMounted, getCurrentInstance } from 'vue'
import { useActiveComponent } from '@shared/hooks/use-active-component'
import { defineAsyncComponentHoc } from '@shared/utils/scanner-files' // 懒加载组件

const { proxy } = getCurrentInstance()
const props = defineProps({
  baseInfo: {
    type: Object,
    default: () => ({})
  },
  coreCode: {
    type: String,
    default: ''
  }
})
const emit = defineEmits([])

/* 状态 */
// permissionType（权限类型）10-公开权限，20-部分权限 -
const {
  activeTab: permissionType,
  activeComponent,
  registerComponentInstance,
  activeComponentInstance
} = useActiveComponent(
  {
    // 公开权限
    // 10: defineAsyncComponentHoc(() => import('./OpenAuth.vue')),
    // 部分权限
    20: defineAsyncComponentHoc(() => import('./PartialAuth.vue'))
  },
  props.baseInfo.permissionType
)

/* 方法 */

/* 计算 */

/* 监听 */

/* 周期 */
onMounted(() => {})

/* 暴露 */
defineExpose({
  key: 'auth',
  $: proxy.$,
  async onSave() {
    // permissionType（权限类型）10-公开权限，20-部分权限
    let userList = []
    if (permissionType.value === '20') {
      // 如果是部分权限，那么要获取用户列表
      userList = await activeComponentInstance.value.getUserList()
    }

    // 组装请求参数
    return {
      permissionType: permissionType.value,
      userIds: userList.map((user) => user.id)
    }
  }
})
</script>

<!--render-->
<template>
  <div class="page flex h-page flex-col gap-4 rounded-md bg-white p-4">
    <!-- 内容区 -->
    <div class="font-bold text-text-primary">
      项目权限
    </div>
    <!-- permissionType（权限类型）10-公开权限，20-部分权限 -->
    <el-radio-group v-model="permissionType">
      <el-radio label="10">
        公开权限
      </el-radio>
      <el-radio label="20">
        部分权限
      </el-radio>
    </el-radio-group>

    <keep-alive>
      <component
        :is="activeComponent"
        :ref="registerComponentInstance"
        :baseInfo="baseInfo"
      />
    </keep-alive>
  </div>
</template>

<!--style-->
<style scoped lang="less"></style>
